package practice;

import java.util.*;
import java.io.*;
class Read // ⾃定义快读 Read
{
    StringTokenizer st = new StringTokenizer("");
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
    String next() throws IOException
    {
        while(!st.hasMoreTokens())
        {
            st = new StringTokenizer(bf.readLine());
        }
        return st.nextToken();
    }
    String nextLine() throws IOException
    {
        return bf.readLine();
    }
    int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }
    long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }
    double nextDouble() throws IOException
    {
        return Double.parseDouble(next());
    }
}
public class Day6 {
    /**
     * dd爱框框
     * 链接：https://ac.nowcoder.com/acm/problem/221681
     * 来源：牛客网
     *
     * 读入n，xn，x,给出nn个数a[1],a[2],……,a[n]a[1],a[2],……,a[n],求最小的区间[l,r][l,r]，
     * 使a[l]+a[l+1]+……+a[r]≥xa[l]+a[l+1]+……+a[r]≥x，若存在相同长度区间，输出ll最小的那个
     * @param args
     * @throws IOException
     */
    public static void main1(String[] args) throws IOException{
        Reader in = new Reader();
        int n = in.nextInt();
        int k = in.nextInt();
        int[] nums = new int[n];
        for(int i = 0; i < n; i++) {
            nums[i] = in.nextInt();
        }
        int left = 0;
        int right = 0;
        int start = 0;
        int end = 0;
        int count = Integer.MAX_VALUE;
        int sum = 0;
        while(right < n) {
            sum += nums[right];
            while(sum >= k) {
                int len = right - left + 1;
                if(len < count) {
                    start = left;
                    end = right;
                    count = len;
                }
                sum -= nums[left];
                left++;
            }
            right++;
        }
        System.out.println((start+1) + " " + (end+1));
    }

    /**
     * 除2！
     * 题目描述：给一个数组，一共有 n n 个数。
     * 你能进行最多 k k 次操作。每次操作可以进行以下步骤：
     *  a
     * 现在你进行不超过 k k 次操作后，让数组中所有数之和尽可能小。请输出这个最小的和。
     * 输入：5 3
     *      2 4 8 10 11
     * 输出：24
     * 对8操作2次，对10操作1次，最后的数组是2 4 2 5 11。可以证明这样的操作是最优的。
     * @param args
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();
        PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
            public int compare(Integer o1, Integer o2) {
                return o2.compareTo(o1);
            }
        });
        int x = 0;
        long sum = 0;
        for(int i = 0; i < n; i++) {
            x = in.nextInt();
            sum += x;
            if(x % 2 == 0) {
                queue.offer(x);
            }
        }
        while(!queue.isEmpty() && k != 0) {
            int topMax = queue.poll() / 2;
            sum -= topMax;
            if(topMax % 2 == 0) {
                queue.offer(topMax);
            }
            k--;
        }
        System.out.println(sum);
    }
}
